home *** CD-ROM | disk | FTP | other *** search
- // ===============================================================
- // Vertex Program: General ambient template programm
- // Description:
- // Last Update: 14/08/2003
- // Coder: Andrey Honich
- // ===============================================================
-
- #include "../CGVPMacro.csi"
-
- DefaultPos
- AutoEnumTC
-
- VertAttributes
- {
- POSITION_3
- TEXCOORD0_2
- #if %DOT3LM || %LM
- TEXCOORD1_2
- #endif
- #if %ENVCMAMB || %ENVLIGHT
- TNORMAL_3
- #elif %ENVCMSPEC
- TANG_3X3
- #endif
- }
-
- MainInput
- {
- VIEWPROJ_MATRIX,
- #if %ENVCMAMB
- CAMERA_POS,
- uniform float4x4 TexMatrix,
- #elif %ENVLIGHT
- uniform float4 EnvColors[6],
- uniform float4x4 TexMatrix,
- #elif %ENVCMSPEC
- CAMERA_POS,
- uniform float4x4 ModelMatrix,
- #endif
- }
- DeclarationsScript
- {
- struct appin
- {
- float4 Position : POSITION;
- float4 baseTC : TEXCOORD0;
- #if %DOT3LM || %LM
- float4 lmTC : TEXCOORD1;
- #endif
- #if %ENVLIGHT || %ENVCMAMB
- IN_TNORMVEC
- #elif %ENVCMSPEC
- IN_TANGVECS
- #endif
- };
-
- // define outputs from vertex shader
- struct vertout
- {
- float4 HPosition : POSITION;
- float4 baseTC : TEXCOORDN;
- #if %LM
- float4 lmTC : TEXCOORDN;
- #elif %DOT3LM
- #if %BUMP_MAP
- float4 bumpTC : TEXCOORDN;
- #endif
- float4 lmTC : TEXCOORDN;
- float4 lmdirTC : TEXCOORDN;
- #endif
- #if %ENVLIGHT
- float4 Color : COLOR0;
- #elif %ENVCMAMB
- float4 envTC : TEXCOORDN;
- #elif %ENVCMSPEC
- #if !%DOT3LM && %BUMP_MAP
- float4 bumpTC : TEXCOORDN;
- #endif
- float4 viewVec : TEXCOORDN;
- float4 tangVec : TEXCOORDN;
- float4 binormVec : TEXCOORDN;
- float4 normVec : TEXCOORDN;
- #endif
- };
- }
- PositionScript = PosCommon
- CoreScript
- {
- OUT.baseTC.xy = IN.baseTC.xy;
- #if %ENVCMSPEC && %GLOSS_MAP
- OUT.baseTC.zw = IN.baseTC.xy;
- #endif
-
- #if %LM
- OUT.lmTC.xy = IN.lmTC.xy;
- #elif %DOT3LM
- #if %BUMP_MAP
- OUT.bumpTC.xy = IN.baseTC.xy;
- #endif
- OUT.lmTC.xy = IN.lmTC.xy;
- OUT.lmdirTC.xy = IN.lmTC.xy;
- #endif
-
- #if %ENVCMAMB
- float3 vVec = CameraPos.xyz - vPos.xyz;
- float3 tCamVec = normalize(vVec);
- float3 tNormal = IN.TNormal.xyz;
- float3 tRef = dot(tNormal.xyz, tCamVec.xyz) * tNormal.xyz * 2 - tCamVec.xyz;
- float4 tRM;
- tRM.xyz = tRef.xyz;
- tRM.w = vPos.w;
- OUT.envTC = mul(tRM, TexMatrix);
- #elif %ENVLIGHT
- // Calculate average radiosity color from 6 colors (Cube)
- float3 tNormal;
- tNormal = mul((float3x3)TexMatrix, IN.TNormal.xyz);
- float3 Compare1 = step(tNormal, 0);
- float3 Compare0 = 1 - Compare1;
- float3 signN = sign(tNormal);
- tNormal = tNormal * tNormal;
- tNormal = tNormal * signN;
- float4 ColorX = EnvColors[0]*tNormal.x*Compare0.x + EnvColors[1]*(-tNormal.x)*Compare1.x;
- float4 ColorY = EnvColors[2]*tNormal.y*Compare0.y + EnvColors[3]*(-tNormal.y)*Compare1.y;
- float4 ColorZ = EnvColors[4]*tNormal.z*Compare0.z + EnvColors[5]*(-tNormal.z)*Compare1.z;
- OUT.Color = (ColorX + ColorY + ColorZ) * 2.0;
- #elif %ENVCMSPEC
- TANG_MATR
-
- #if !%DOT3LM && %BUMP_MAP
- OUT.bumpTC.xy = IN.baseTC.xy;
- #endif
- float3 viewVec = CameraPos.xyz - vPos.xyz;
- OUT.viewVec.xyz = mul(objToTangentSpace, viewVec.xyz);
-
- float3 worldTangentS = mul((const float3x3)ModelMatrix, objToTangentSpace[0]);
- float3 worldTangentT = mul((const float3x3)ModelMatrix, objToTangentSpace[1]);
- float3 worldNormal = mul((const float3x3)ModelMatrix, objToTangentSpace[2]);
-
- OUT.tangVec.xyz = worldTangentS;
- OUT.binormVec.xyz = worldTangentT;
- OUT.normVec.xyz = worldNormal;
- #endif
- }
-